//媒体库模块
#ifndef MEDIA_LIB_H__
#define MEDIA_LIB_H__
#include <stdint.h>
#define MAXCHN_NR 200  //最多频道个数
#define MEDIA_LIB_PATH  "/home/xiaowei/media"  //媒体库目录
#define MIN_CHN_ID  1 //最小频道号
#define CHN_DECR_NAME "descr.txt"  //描述文件后缀
// 修复后（让用户配置，根据实际文件修改，如320kbps）
#define MP3_BITRATE 320000  // 改为实际MP3文件的码率（如320000=320kbps）
// 服务器 media_lib.h
#define MP3_FRAME_SIZE 1152  // 标准MP3帧大小（适配大多数320kbps文件）
#define BUFSIZE (MP3_FRAME_SIZE * 4)  // 缓冲区设为4帧大小（避免分割）
typedef uint8_t chnid_t; //频道号

/*
	媒体库模块不需要往C端，多播组发包
	所以不需要考虑协议
 	只与自己交互，所以可以用指针
	不需要考虑大小端困扰，访问效率
	没有字节对齐困扰，不用单字节对齐
	因此也尽量不要用协议内的数据结构
 */

// ADT 抽象数据类型
//单个频道的频道列表结构
struct mlib_list_entry {
	chnid_t chnid;
	char *descr;
};

/*
   目录结构
   流媒体：可以从任意位置开始播放的文件
   文件系统
   	媒体库目录：
     	媒体频道目录-》描述文件txt
	 			-》一个或多个mp3文件
		少儿频道目录。。。
*/

// 返回频道列表数组   返回一个地址   返回一个变量
extern int mlib_get_chn_list(struct mlib_list_entry **mlib, int *nmemb);//读描述文件  此时读一次目录

//指定频道的数据
extern int mlib_read_chn_data(chnid_t chnid, void *buf, size_t size);//读数据文件mp3  此时再次读取目录

// 销毁媒体库
extern void mlib_destroy(void); // 释放媒体库所有资源
/*
   上述情况导致每个频道每次操作都要两次读取
   因此定义共用体简化操作，只读取一次
   减少冗余重复代码
*/

#endif